package 设计mos;

/**
 * @作者：xie
 * @时间：2022/10/8 14:46
 * 抽象工厂类AbstractFactory: 抽象工厂模式的核心,与应用的业务逻辑无关. 通常使用接口或者抽象类实现,所有具体工厂类ConcreteFactory必须实现接口或者抽象类
 * 具体工厂类ConcreteFactory: 实现工厂定义的方法,包含创建具体产品实例的业务逻辑
 * 抽象产品AbstractProduct: 定义一类产品对象的接口或者抽象类,这个类是工厂方法模式创建的对象的父类
 * 具体产品ConcreteProduct: 实现业务逻辑的具体的产品,抽象工厂中创建的每一个产品对象都是一个具体产品的实例
 *
 */
public class AbstractFactory {
    public static void main(String[] args) {
        Factory1 factory1 = new Factory1();
        AProductA productA = factory1.createProductA();
        productA.info();

        Factory2 factory2 = new Factory2();
        AProductB productB = factory2.createProductB();
        productB.info();
    }
}


interface AFactory{

    AProductA createProductA();
    AProductB createProductB();

}
class Factory1 implements AFactory{



    @Override
    public AProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public AProductB createProductB() {
        return new ProductB1();
    }
}

class Factory2 implements AFactory{



    @Override
    public AProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public AProductB createProductB() {
        return new ProductB2();
    }
}
interface  AProductA{
    void info();
}


class ProductA1 implements AProductA {
    @Override
    public void info(){
        System.out.println("产品信息：A");
    }
}
class ProductA2 implements AProductA {
    @Override
    public void info(){
        System.out.println("产品信息：B");
    }
}

interface  AProductB{
    void info();
}


class ProductB1 implements AProductB {
    @Override
    public void info(){
        System.out.println("产品信息：A");
    }
}
class ProductB2 implements AProductB {
    @Override
    public void info(){
        System.out.println("产品信息：B");
    }
}